//! Header for the Album class
#ifndef ALBUM_H
#define ALBUM_H

#include "MusicCollection.h"

//! Represents an Album
/*!
	The class Album specializes MusicCollection but allows
	only to add songs.
	\class Album
	\author Thomas Pfeiffer
	\date 06.12.2012
*/
class Album : public MusicCollection {
public:

	//! The Ctor for the Album
	/*!
	The CTor of an Album
	\param name The Name of the Album
	\param interpret The interpret of the Album
	*/
	Album ( std::string const& name, std::string const& interpret) :
		MusicCollection(eAlbum, name), mInterpret(interpret) {}; 

	//! Adds MusicMedia to the Album
	/*!
	The Function Add adds the MusicMedia mm to
	the Album. mm must only be of kind song.
	Otherwise an exception is thrown.
	\param mm The MusicMedia want to add. Must only be a Song.
	\throws std::exception in case mm is not of kind Song.
	*/
	void Add (MusicMedia * mm);
	
	void Accept (IVisitor * visitor);

	//! Returns the Interpret of the Album
	/*!
	This function returns the album's interpret;
	\returns The albums interpret.
	*/
	std::string const * getInterpret() const;

private:
	std::string mInterpret;
};

#endif